home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Suzy B Software 2
/
Suzy B Software CD-ROM 2 (1994).iso
/
extras
/
programm
/
gemfsc19
/
gemfsc19.lzh
/
GNUGEM27
/
VDIINQ.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-24
|
7KB
|
355 lines
/*
* Vdi inquiry funcs library interface
*
* vq_extnd extended inquire
* vq_color inquire color rep.
* vql_attribute inquire polyline attribute
* vqm_attributes inquire polymarker atribs
* vqf_attributes inquire fill area atribs
* vqt_attributes inquire text atribs
* vqt_extent inquire text extent
* vqt_width inquire char cell width
* vqt_name inquire face name
* vq_cellarray inquire cell array
* vqin_mode inquire input mode
* vqt_fontinfo get font info
*
* ++jrb bammi@cadence.com
* modified: mj -- ntomczak@vm.ucs.ualberta.ca
*
*/
/*
* Note that at this moment (Sept. 91) Atari modified vqt_name()
* interface and a string returned from it has a length 33 with
* the 33rd byte serving as a flag. This should not matter if
* your program was allocating this extra byte anyway for a
* terminating null, but it may kill you if this space was tight!
* THIS IS NOT OFFICIAL yet and it may change!!!
*
*******
*
* This is official now (jan 93 SpeedoGDOS docs from atari).
* To quote the doc "A new parameter has been added to this function.
* It is a flag that indicates whether or not the font in question is
* an outline font or bitmap font. The flag will be contained in
* intin[33]; 0 will signify a bitmap font, and 1 will indicate an
* outline font."
*/
#include "common.h"
#ifdef __DEF_ALL__
#define L_vq_extnd
#define L_vq_color
#define L_vql_attr
#define L_vqm_attr
#define L_vqf_attr
#define L_vqt_attr
#define L_vqt_exte
#define L_vqt_widt
#define L_vqt_name
#define L_vq_cella
#define L_vqin_mod
#define L_vqt_font
#endif /* __DEF_ALL__ */
#ifdef L_vq_extnd
/* vq_extnd extended inquire
* returns void (results in args)
*/
void vq_extnd(int handle, int flag, int work_out[])
{
#ifndef __MSHORT__
short *iptr;
int *wptr, *end;
_intin[0] = flag;
__vdi__(VDI_CONTRL_ENCODE(102, 0, 1, 0), handle);
wptr = work_out;
end = wptr + 45;
iptr = _intout;
do {
*wptr++ = *iptr++;
} while (wptr < end);
end += 12;
iptr = _ptsout;
do {
*wptr++ = *iptr++;
} while (wptr < end);
#else
_intin[0] = flag;
_vdiparams[3] = &work_out[0];
_vdiparams[4] = &work_out[45];
__vdi__(VDI_CONTRL_ENCODE(102, 0, 1, 0), handle);
_vdiparams[3] = &_intout[0];
_vdiparams[4] = &_ptsout[0];
#endif /* __MSHORT__ */
}
#endif /* L_vq_extnd */
#ifdef L_vq_color
/* vq_color inquire color rep.
* returns index or -1 if index out of range
*/
int vq_color(int handle, int index, int flag, int rgb[])
{
short *wptr;
_intin[0] = index;
_intin[1] = flag;
__vdi__(VDI_CONTRL_ENCODE(26, 0, 2, 0), handle);
wptr = &_intout[1];
*rgb++ = *wptr++;
*rgb++ = *wptr++;
*rgb = *wptr;
return (int)_intout[0];
}
#endif /* L_vq_color */
#ifdef L_vql_attr
/* vql_attribute inquire polyline attribute
* returns void (results in arg)
*/
void vql_attribute(int handle, int atrib[])
{
short *wptr;
__vdi__(VDI_CONTRL_ENCODE(35, 0, 0, 0), handle);
wptr = &_intout[0];
*atrib++ = *wptr++;
*atrib++ = *wptr++;
*atrib++ = *wptr;
*atrib = _ptsout[0];
}
#endif /* L_vql_attr */
#ifdef L_vqm_attr
/* vqm_attributes inquire polymarker atribs
* returns void (result in arg)
*/
void vqm_attributes(int handle, int atrib[])
{
short *wptr;
__vdi__(VDI_CONTRL_ENCODE(36, 0, 0, 0), handle);
wptr = &_intout[0];
*atrib++ = *wptr++;
*atrib++ = *wptr++;
*atrib++ = *wptr;
*atrib = _ptsout[1];
}
#endif /* L_vqm_attr */
#ifdef L_vqf_attr
/* vqf_attributes inquire fill area atribs
* returns void (result in arg)
*/
void vqf_attributes(int handle, int atrib[])
{
short *wptr;
__vdi__(VDI_CONTRL_ENCODE(37, 0, 0, 0), handle);
wptr = &_intout[0];
*atrib++ = *wptr++;
*atrib++ = *wptr++;
*atrib++ = *wptr++;
*atrib++ = *wptr;
}
#endif /* L_vqf_attr */
#ifdef L_vqt_attr
/* vqt_attributes inquire text atribs
* reurns void (results in arg)
*/
void vqt_attributes(int handle, int atrib[])
{
#ifndef __MSHORT__
short *wptr;
int *end;
__vdi__(VDI_CONTRL_ENCODE(38, 0, 0, 0), handle);
wptr = &_intout[0];
end = &atrib[6];
do {
*atrib++ = *wptr++;
} while (atrib < end);
wptr = &_ptsout[0];
end += 4;
do {
*atrib++ = *wptr++;
} while (atrib < end);
#else
_vdiparams[3] = &atrib[0];
_vdiparams[4] = &atrib[6];
__vdi__(VDI_CONTRL_ENCODE(38, 0, 0, 0), handle);
_vdiparams[3] = &_intout[0];
_vdiparams[4] = &_ptsout[0];
#endif /* __MSHORT__ */
}
#endif /* L_vqt_attr */
#ifdef L_vqt_exte
/* vqt_extent inquire text extent
* returns void (result in arg)
*/
void vqt_extent(int handle, char *str, int extent[])
{
unsigned char ch;
short *ptr;
int *ept, *end;
ptr = _intin;
while ( ch = *str++)
*ptr++ = ch;
__vdi__(VDI_CONTRL_ENCODE(116, 0, (int)(ptr - _intin), 0), handle);
ptr = _ptsout;
ept = extent;
end = ept + 8;
do {
*ept++ = *ptr++;
} while (ept < end);
}
#endif /* L_vqt_exte */
#ifdef L_vqt_widt
/* vqt_width inquire char cell width
* returns status (and results in args)
*/
int vqt_width(int handle, int chr,
int *cw, int *ldelta, int *rdelta)
{
_intin[0] = chr;
__vdi__(VDI_CONTRL_ENCODE(117, 0, 1, 0), handle);
*cw = _ptsout[0];
*ldelta = _ptsout[2];
*rdelta = _ptsout[4];
return (int)_intout[0];
}
#endif /* L_vqt_widt */
#ifdef L_vqt_name
/* vqt_name inquire face name
* returns index (name in arg)
*/
int vqt_name(int handle, int element, char *name)
{
short *wptr, *end;
_intin[0] = element;
__vdi__(VDI_CONTRL_ENCODE(130, 0, 1, 0), handle);
wptr = &_intout[1];
end = wptr + 33; /* 32 string elements + flag */
do {
*name++ = *wptr++;
} while (wptr < end);
return (int)_intout[0];
}
#endif /* L_vqt_name */
#ifdef L_vq_cella
/* vq_cellarray inquire cell array
* returns void (results in args)
*/
void vq_cellarray(int handle, int pxyarray[], int row_len, int nrows,
int *el_used, int *rows_used, int *status, int color[])
{
short *end, *wptr = _ptsin;
end = wptr + 4;
do {
*wptr++ = *pxyarray++;
} while (wptr < end);
_contrl[7] = row_len;
_contrl[8] = nrows;
__vdi__(VDI_CONTRL_ENCODE(27, 2, 0, 0), handle);
wptr = _intout;
end = wptr + (short) nrows * (short) row_len;
while (wptr < end)
*color++ = *wptr++;
*el_used = _contrl[9];
*rows_used = _contrl[10];
*status = _contrl[11];
}
#endif /* L_vq_cella */
#ifdef L_vqin_mod
/* vqin_mode inquire input mode
* returns void (desult in arg)
*/
void vqin_mode(int handle, int dev, int *mode)
{
_intin[0] = dev;
__vdi__(VDI_CONTRL_ENCODE(115, 0, 1, 0), handle);
*mode = _intout[0];
}
#endif /* L_vqin_mod */
/* vqt_fontinfo (alias vqt_font_info) get font info
* returns void (results in args)
*/
#ifdef L_vqt_font
__asm__(".stabs \"_vqt_font_info\",5,0,0,_vqt_fontinfo");
/* dept of clean tricks */
void vqt_fontinfo(int handle, int *minade, int *maxade, int distances[],
int *maxwidth, int effects[])
{
short *wptr, *end;
__vdi__(VDI_CONTRL_ENCODE(131, 0, 0, 0), handle);
*minade = _intout[0];
*maxade = _intout[1];
wptr = _ptsout;
*maxwidth = *wptr++;
end = wptr + 6;
do {
*distances++ = *wptr++;
*effects++ = *wptr++;
} while (wptr < end);
*distances++ = *wptr;
*distances = wptr[2];
}
#endif /* L_vqt_font */
/* -eof- */